Excel VBA中判断word文件是否打开,未打开则打开该文件 |
您所在的位置:网站首页 › VBA 关闭WORD › Excel VBA中判断word文件是否打开,未打开则打开该文件 |
需求与场景
在Excel的VBA中,打开Word文件是比较容易的,但判断某个word文件是否已经打开,则有些小坑需要注意。 因为工作需求,要把Excel中的数据写入到指定的word文件里(用链接的方式经常会出现word无响应的状况,而且数据量大的时候,打开速度实在太慢。),所以就研究了一下如何判断word文件是否被打开的情形。参考了一些资料,结合自己的理解,记录如下。 Excel VBA代码 ① 首先要在ExcelVBA工程中引入word工具-引用,选取MicroSoft Word xx.0 Object Library ②判断指定word文件是否打开(函数) Function WordDocIsOpen(ByVal strDocName As String) As Boolean 'objWordDocName 这个变量的目的是接收一下循环出来的objWordDoc的文件名, '如果没有的话会导致if条件无法正确判断(office2010试验后结果) Dim objWordDocName As String Dim objWordApp As Object Dim objWordDoc As Object On Error Resume Next '此句是关键,因为当word文件没有被打开时,会直接报错(GetObject:Run-time error '429':) strDocName = UCase(strDocName) '将文件名字母全部大写。注意:这个参数变量必须是全路径+文件名 Set objWordApp = GetObject(, "Word.Application") For Each objWordDoc In objWordApp.Documents '遍历当前在 Word 中打开的所有 Document 对象的集合 objWordDocName = UCase(objWordDoc.FullName) 'FullName是完整路径+文件名 If objWordDocName = strDocName Then WordDocIsOpen = True Exit For Else WordDocIsOpen = False End If Next Set objWordDoc = Nothing '清变量 Set objWordApp = Nothing End Function ③判断后,打开word文件(使用函数) Sub OpenWord() If WordDocIsOpen("D:\Test\test.docx") Then MsgBox "该word文件已经被打开。" Else Set wrd = CreateObject("Word.Application") wrd.Visible = True wrd.Documents.Open fileName:="D:\Test\test.docx" Set wrd = Nothing End If End Sub ④其他一些说明1、判断word文件是否被打开以及打开了几个,要用GetObject,而不能用CreateObject。 GetObject与CreateObject可以参看这个微软文档,写的很清楚。(无论多么简单的语言,都必须多看文档,少百度) GetObject is used to attach to a running instance of an automation server. CreateObject is used to start a new instance of an Automation server. 2、如果不想用objWordDoc.FullName这种完整路径名的写法,可以用objWordDoc.Name,参数文件名可以这样截取: strPath = "D:\Test\test.docx" docName = Right(strPath, Len(strPath) - InStrRev(strPath, "\")) 参考引用的资料判断指定的WORD文档是否被打开的函数代码 微软文档:word与其他应用程序进行通讯 微软文档:word(Documents对象) |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |